package com.util;

import com.hsc.mvc.MvcFile;
import com.hsc.mvc.ParameterSource;
import com.hsc.mvc.bind.ParameterBindStrategy;

import java.lang.reflect.Parameter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author
 * @date 2025-06-02
 * @Description 自定义的参数绑定器 实现类 配置文件需要进行配置
 */
public class MapParameterBinder implements ParameterBindStrategy {
    @Override
    public Object bind(Parameter parameter, ParameterSource parameterSource) {
        //将所有的请求参数（paramValues , fileParamValues)
        //依次存入一个新 map中
        //要求，存储时，只存储第一个。
        Map<String, Object> map = new HashMap<>();
        // String 类型的
        Set<String> stringParamNames = parameterSource.getStringParamNames();
        for (String stringParamName : stringParamNames) {
            String[] values = parameterSource.getStringParam(stringParamName);
            map.put(stringParamName, values[0]);
        }
        // MvcFile 类型的
        Set<String> fileParamNames = parameterSource.getFileParamNames();
        for (String fileParamName : fileParamNames) {
            MvcFile[] files = parameterSource.getFileParam(fileParamName);
            map.put(fileParamName, files[0]);
        }
        return map;
    }

    /**
     * map 类型的参数绑定器
     *
     * @param parameter
     * @return
     */
    @Override
    public boolean isSupport(Parameter parameter) {
        Class<?> type = parameter.getType();
        return type == Map.class || type == HashMap.class;
    }
}
